package com.ang.propagation.t2;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

/**
 * requires_new
 * s1不管有没有事务，s2都会创建一个自己的事物；
 * 如果s1有事务，s1事务被挂起，s2事务结束后在执行s1的事务；相当于创建了2个事务，互不影响
 *      1.s1异常回滚，不会影响s2
 *      2.s2异常，如果被s1捕获，不会影响s1，否则s1也会回滚（因为s2的异常上抛给了s1）
 */
@Component
public class NewService1 {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private NewService2 service2;

    @Transactional()
    public void trans() {
        jdbcTemplate.update("update t_user set age = ? where id = ?", 1, 1);
        //捕获了异常，不会影响调用方事物的回滚
        try {
            service2.update();
        }catch (Exception e){
            e.printStackTrace();
        }
//        int i = 1 / 0;
    }
}
